var SUCCESS = 200;
var SIGN_ERROR = 1001;
/**
 * 异步加载数据时的等待动画
 */
function showAjaxLoad() {
    $("body").append('<div id="ajaxLoad" style="display: none;width: 100%;position: fixed;top: 0;background-color: rgba(0,0,0,0.0);height: 100%;">'
            +'<img src="/images/ajaxLoad.gif" style="width: 70px;height: 70px;position: absolute;top: 50%;left: 50%;margin-top: -35px;margin-left: -35px;"/>'
            +'</div>');
    var self = this;
    ajaxTimeOut = setTimeout(function(){
    	$("#ajaxLoad").show();
    },500);
}
function removeAjaxLoad(){
	if(ajaxTimeOut){
		clearTimeout(ajaxTimeOut)
	}
	$("#ajaxLoad").remove();
}

/**
 * 确认取消弹出框
 * @param title 提示的内容
 * @param okFunction 点击确定时的回调函数
 */
function showOkOrCancelAlertTips(title, okFunction) {
    $("body").append('<div style="width: 100%;position: fixed;top: 0;background-color: rgba(0,0,0,0.6);height: 100%;">'
            + '<div style="width: 360px;height: 204px;top: 50%;left: 0;right: 0;margin: -102px auto 0;background-color: #ffffff;position: relative;border-radius: 3px;text-align: center">'
            + '<div style="font-size: 18px;text-align: center;padding-top: 55px;height: 24px;line-height: 24px;color: #4F5D72;width: 330px;margin: 0 auto;">'+ title +'</div>'
            + '<div style="margin-top: 45px;height: 35px;line-height: 35px;text-align: center;">'
            + '<button id="okOrCancelAlertTipsCancelBtn" style="outline: none;border: 1px solid #E0E4EC;color: #8891AC;font-size: 12px;background-color: #dcdcdc;height: 30px;line-height: 30px;width: 90px;border-radius: 3px;cursor: pointer;">取消</button>'
            + '<button id="okOrCancelAlertTipsOkBtn" style="outline: none;border: 1px solid #468ded;color: #ffffff;font-size: 12px;background-color: #468ded;height: 30px;line-height: 30px;width: 90px;border-radius: 3px;cursor: pointer;margin-left: 15px;">确定</button>'
            + '</div></div></div>');
    $("#okOrCancelAlertTipsCancelBtn").click(function () {
        $(this).parent().parent().parent().remove();
    });
    $("#okOrCancelAlertTipsOkBtn").click(function () {
    	$(this).parent().parent().parent().remove();
        if(okFunction){
            okFunction();
        }
    })
}

/**
 * 仅确认按钮弹出框
 * @param title 提示的内容
 * @param okFunction 点击ok之后的回调，可为空
 */
function showOkAlertTips(title, okFunction){
    $("body").append('<div style="z-index: 7;width: 100%;position: fixed;top: 0;background-color: rgba(0,0,0,0.6);height: 100%;">'
            +'<div style="width: 360px;height: 204px;top: 50%;left: 0;right: 0;margin: -102px auto 0;background-color: #ffffff;position: relative;border-radius: 3px;text-align: center">'
            +'<div style="font-size: 18px;text-align: center;padding-top: 55px;height: 24px;line-height: 24px;color: #4F5D72;width: 330px;margin: 0 auto;">'+title+'</div>'
            +'<button id="okAlertTipsOkBtn" style="width: 100px;height: 40px;line-height: 40px;border-radius: 3px;cursor: pointer;border: 1px solid #468ded;background-color: #468ded;color: #ffffff;font-size: 16px;margin: 50px auto 0;">確定</button>'
            +'</div></div>');
    $("#okAlertTipsOkBtn").click(function () {
        $(this).parent().parent().remove();
        if(okFunction){
    		okFunction();
    	}
    });
}

/**
 * 向后台发起ajax请求
 * @param url
 * @param method get或post
 * @param data json数据的data
 * @param successFunc 请求成功的回调，仅处理状态码是success的时候，不是success采取如果未登录弹框提示之后跳转到登陆页面，其他状态码直接显示后台返回的信息
 * @param errorFunc 请求失败的回调
 * @param successAllFunc 请求成功的回调，一般使用上面的那个，此函数参数不传，当不是success时需要特别处理时，上面那个就传null，然后传这个参数
 */
function ajaxByMethod(url, method, data, successFunc, errorFunc, completeFunc, successAllFunc){
	showAjaxLoad();
	if(!errorFunc){
		var errorFunc = function(){
			showOkAlertTips("错误，请重试。", function(){location.reload();})
		}
	}
	
	//该函数作为成功的回调函数，所以会有一个后台返回的result，所以该函数一定要有个result参数，然后该函数里面的successFunc函数就是平常的把result作为参数传进去调用函数罢了
	var successFunction = function(result){
		removeAjaxLoad();
		
		if(successFunc == null){
			successAllFunc(result);
		}else{
			if(result.code == SUCCESS){
				successFunc(result.data);
			}else{
				if(result.code == SIGN_ERROR){
					showOkAlertTips(result.msg, function(){location.href="/index";});
				}else{
					showOkAlertTips(result.msg);
				}
			}
		}
	}
	var errorFunction = function(){
		removeAjaxLoad();
		errorFunc();
	}
	var option = {
		url: url,
		type: method,
		data: data,
		dataType: "json",
		success: successFunction,
		error: errorFunction,
		complete: completeFunc
	};
	$.ajax(option);
}

/**
 * 获取input的name属性的值
 * @param nameArr 需要获取值的input的name值的数组
 * @returns 一个对象，key是name，value是name的值；
 */
function getValuesByInputName(nameArr){
	var inputName = "";
	var inputValue = "";
	var inputObject = {};
	if(nameArr){
		for(var i=0;i<nameArr.length;i++){
			inputName = nameArr[i];
			inputValue = $("input[name='"+ inputName +"']").val();
			inputObject[inputName] = inputValue;
		}
	}
	return inputObject;
}

/**
 * 按要求判断输入的值是否合法
 * @param value 输入的值
 * @param judgeType 判断类型，非空，手机号码，固定电话
 * @param title 非空时显示的标题
 * @returns {Boolean} 不通过返回true，通过返回false
 */
function judgeInputValue(value, judgeType, title){
	if(judgeType == "notEmpty"){
		if(value == ""){
			showOkAlertTips(title);
    		return true;
		}
	}else if(judgeType == "phone"){
		if(!(value.length == 11 && (/^1[34578]\d{9}$/.test(value)))){
    		showOkAlertTips("手机号码格式不正确。");
    		return true;
    	}
	}else if(judgeType == "fixphone"){
		if(!(/^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$/.test(value))){
    		showOkAlertTips("固定电话格式不正确。");
    		return true;
    	}
	}else if(judgeType == "orphone"){
		if(!(value.length == 11 && (/^1[34578]\d{9}$/.test(value)))){
    		return true;
    	}
	}else if(judgeType == "orfixphone"){
		if(!(/^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$/.test(value))){
    		showOkAlertTips("联系方式格式不正确。");
    		return true;
    	}
	}else if(judgeType == "email"){
		if(!(/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/.test(value)) && value != ""){
			showOkAlertTips("邮箱格式不正确。");
    		return true;
    	}
	}
	return false;
}
